//////////////////////////////////////////////////////////////////////////

#ifndef _WEAPON_H_
#include "weapon.h"
#endif

////////////////////////////////////////////////////////////////////////////////

#ifndef _MATHFUNCTIONS_H_
#include "mathfunctions.h"
#endif

#ifndef _TIMER_H_
#include "timer.h"
#endif

#include <cmath>
#include <limits>

//////////////////////////////////////////////////////////////////////////

int defaultSWeaponID = 0;
int defaultSWeaponReloadTime = 300;

const float defaultBulletVelocity = 1.3f;
const int defaultBulletDamage = 10;


//////////////////////////////////////////////////////////////////////////


Weapon::Weapon()
: m_ID(defaultSWeaponID),
  m_ReloadTime(defaultSWeaponReloadTime)
{
}


//////////////////////////////////////////////////////////////////////////


Weapon::~Weapon()
{
}


//////////////////////////////////////////////////////////////////////////


int Weapon::GetID() const
{
    return m_ID;
}


//////////////////////////////////////////////////////////////////////////


size_t Weapon::GetReloadTime() const
{
    return m_ReloadTime;
}


//////////////////////////////////////////////////////////////////////////


Bullet* Weapon::Shoot( int _ID,
                       PE::Point _position,
                       PE::Direction _direction )
{
    // Bullet pointer
    Bullet* bullet = NULL;

    // Time of previous shot
    static size_t previousShotTime = 0;

    // Current time
    size_t currentTime = Timer::GetCurrTime();

    // If already reloaded
    if (previousShotTime + m_ReloadTime < currentTime)
    {
        // Shoot
        previousShotTime = currentTime;

        PE::Vector velocity = { _direction.dx * defaultBulletVelocity,
            _direction.dy * defaultBulletVelocity };

        // Generate mysterious ID 
        static int bulletId = 0;
        ++bulletId;

        bullet = new Bullet( bulletId,
                            _position,
                            velocity,
                            defaultBulletDamage,
                            _ID );
    }

    return bullet;
}


//////////////////////////////////////////////////////////////////////////
